Solution:
Without loss of generality, let's define the translation vector be to the c-basis vector (note that we can always redefine basis vectors to make this the case).
The mirror operation is therefore given by:
In [1]:
import numpy as np
M = np.eye(4).astype(np.int)
M[2, 2] = -1
print M
The translation operation is given by:
In [2]:
from sympy import symbols
t = symbols("t")
T = [[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, t],
[0, 0, 0, 1]]
Consider the relationship between a reflected point and a translated point. The operation that maps the reflected point to the translated point is given by:
$Op_m = p_t$
$OMp = Tp$
$OM = T$
=> $O = TM^{-1}$
In [3]:
O = np.dot(T, np.linalg.inv(M))
print "O = %s" % str(O)
Now consider a mirror plane at t/2. The symmetry operation is given by:
$O' = T_{t/2}MT_{-t/2}$
In [4]:
T__t2 = [[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, -t/2],
[0, 0, 0, 1]]
T_t2 = [[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, t/2],
[0, 0, 0, 1]]
O = np.dot(T_t2, np.dot(M, T__t2))
print "O' = %s" % str(O)
We may observe that $O' = O$, i.e., a reflection with a perpendicular translation t implies the existence of a mirror plane at t/2.
In [4]: